<?php
namespace SimplePHp\Rendering;

/**
 *解析标签类
 *标签类工具父类
 */
class AutoResolveElement {
	CONST PHP_CLOSE_TAG = 'php';
	CONST PHP_OPEN_TAG = "php_open";
	/**
	 * 吧标签进行解析替换到dom中
	 *【节点替换都是以整个页面为单位】
	 * 一个标签会形成两个部分
	 * 如
	 *  <foreach code="i=1;i LE 2;i++">
	 *  	........
	 *  </foreach>
	 * <php phpCode="for($i=0;$i>10;$i++){">
	 * 	........
	 * <php>
	 * 再进行统一标签替换就是这样的
	 * <?php for($i=0;$i>10;$i++){ ?>
	 * 	.........
	 * <?php } ?>
	 * 非闭合标签就只有前标签
	 * 转换之后的标签是另外一个（php_open）
	 * <echo v="i" />
	 * <php_open phpCode="echo $i;"></php_open>
	 * <?php echo $i; ?>
	 * @param  [type] $start_phpCode    [前节点替换的phpcode]
	 * @param  [type] &$html      [DOMDocument对象]
	 * @param  [type] $ele        [要被替换的元素要从中提取创建php节点的子节点数据]
	 * @param  [type] $tag           [是否时闭合标签，还是非闭合标签  默认闭合标签]
	 * @return [type]                [description]
	 */
	public function phpElement(&$html, &$ele, $start_phpCode, $tag = self::PHP_CLOSE_TAG) {
		$phpNode = $html->createElement($tag);
		$eleChild = new DOMNodeListIterator($ele->childNodes);
		$ele = $ele->parentNode->replaceChild($phpNode, $ele);

		// 创建attribute
		$phpCodeAttribute = $html->createAttribute("phpCode");
		$phpCodeAttribute->value = $start_phpCode;
		$phpNode->appendChild($phpCodeAttribute);

		foreach ($eleChild as $key => $value) {
			$phpNode->appendChild($value);
		}
	}
	/**
	 * E:equal	=
	 *  N:not 	!
	 *  G:greater      >
	 *  L:less            <
	 *  对标签中的特殊符号进行转义
	 * @param  [type] $str [需要转义的字符串]
	 * @return [type]      [返回转义之后的字符串]
	 */
	public function specialWordReplace($str) {
		$specialWord = [" E ", " N ", " EE ", " NE ", " G ", " L ", " GE ", " LE "];
		//对应的符号
		$symbol = ["=", "!", "==", "!=", ">", "<", ">=", "<="];
		return str_replace($specialWord, $symbol, $str);
	}

	private $level = 1;
	public function setLevel($level) {
		$this->level = $level;
	}
	public function getLevel() {
		return $this->level;
	}
}